#include <iostream>
#include <queue>
#include <string.h>
using namespace std;

const int N = 10010;

int n, m, k;
bool vis[N];
int dep[N], edges[N][2]; // 题目说最多连两个点，就不用邻接表了

int bfs(int s)
{
    memset(vis, false, sizeof(vis));
    memset(dep, 0, sizeof(dep));
    queue<int> qu;
    dep[s] = 1;
    vis[0] = true; // 这样下面判断vis时，如果这个点没有相连的点，就不会进if
    qu.push(s);
    while (!qu.empty())
    {
        int top = qu.front();
        qu.pop();
        vis[top] = true;
        for (int i = 0; i < 2; i++)
        {
            if (!vis[edges[top][i]])
            {
                dep[edges[top][i]] = dep[top] + 1;
                vis[edges[top][i]] = true; // 这里也要更新，不然套圈时会重复判断
                qu.push(edges[top][i]);
            }
        }
    }
    int md = 2, ans = 0; // 从2开始，这样一个点没有相连的点时下面就不会更新，ans就是0，符合题意
    for (int i = n; i >= 1; i--)
    {
        if (dep[i] >= md)
        {
            md = dep[i];
            ans = i;
        }
    }
    return ans;
}

int main()
{
    cin >> n >> m >> k;
    while (m--)
    {
        int f, t;
        cin >> f >> t;
        if (edges[f][0])
        {
            edges[f][1] = t;
        }
        else
        {
            edges[f][0] = t;
        }
        if (edges[t][0])
        {
            edges[t][1] = f;
        }
        else
        {
            edges[t][0] = f;
        }
    }
    while (k--)
    {
        int start;
        cin >> start;
        cout << bfs(start) << endl;
    }
    return 0;
}